const express = require('express');
const router = express.Router();
const cozeService = require('../utils/cozeService');
const { checkOSSFileExists } = require('../utils/cozeService');

// 生成PPT主题
router.post('/generate', async (req, res) => {
  try {
    const { topic, subject, grade, slideCount, keyPoints } = req.body;
    
    // 参数验证
    if (!topic || !subject || !grade || !slideCount) {
      return res.status(400).json({
        code: 400,
        message: '请填写完整的PPT生成参数'
      });
    }
    
    console.log('开始生成PPT主题:', { topic, subject, grade, slideCount });
    
    // 调用Coze智能体
    const result = await cozeService.generatePPTTheme({
      topic,
      subject,
      grade,
      slideCount,
      keyPoints
    });
    
    // 构建返回数据
    const pptData = {
      id: Date.now().toString(),
      title: `${topic} - PPT主题大纲`,
      content: result.content,
      subject,
      grade,
      slideCount,
      keyPoints,
      createdAt: new Date().toISOString(),
      usage: result.usage
    };
    
    // 优化：如果有下载链接，进行OSS校验并添加状态信息
    if (result.downloadUrl) {
      const isLinkValid = await checkOSSFileExists(result.downloadUrl);
      console.log(`[PPT链接校验] ${result.downloadUrl} → ${isLinkValid ? '有效' : '无效'}`);
      
      pptData.downloadUrl = result.downloadUrl;
      pptData.linkStatus = isLinkValid ? 'ready' : 'pending';
      pptData.statusMessage = isLinkValid ? '文件已准备就绪' : '文件生成中，请稍后刷新';
      // 保持原始content内容，让前端formatContentWithLinks方法处理链接解析
      // 不再覆盖content，确保智能体返回的完整内容得以保留
    } else {
      pptData.linkStatus = 'pending';
      pptData.statusMessage = '文件生成中，请稍后刷新';
    }
    
    console.log('PPT主题生成成功');
    
    res.json({
      code: 200,
      data: pptData,
      message: 'PPT主题生成成功'
    });
    
  } catch (error) {
    console.error('生成PPT主题失败:', error);
    
    // 优化：标准化错误处理机制
    if (error.message === 'PPT生成结果解析失败') {
      // 当messages中无answer类型消息时，返回400错误
      res.status(400).json({
        code: 400,
        message: 'PPT生成结果解析失败'
      });
    } else {
      // 其他错误返回500
      res.status(500).json({
        code: 500,
        message: error.message || '生成失败，请重试'
      });
    }
  }
});

// 导出PPT大纲
router.get('/export', async (req, res) => {
  try {
    const { id } = req.query;
    
    // 这里可以从数据库获取PPT数据
    // 暂时返回示例数据
    const content = `PPT主题大纲\n\n生成时间：${new Date().toLocaleString()}\n\n内容：\n这里是PPT的详细大纲内容...`;
    
    res.setHeader('Content-Type', 'application/octet-stream');
    res.setHeader('Content-Disposition', `attachment; filename="PPT-${id}.txt"`);
    res.send(content);
    
  } catch (error) {
    console.error('导出PPT失败:', error);
    res.status(500).json({
      code: 500,
      message: '导出失败'
    });
  }
});

module.exports = router;